package com.hyt.it.ogt.pj.mapper;

import java.math.BigDecimal;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hyt.it.ogt.pj.model.dto.NeedReduceDTO;
import com.hyt.it.ogt.pj.model.entity.Student;
import com.hyt.it.ogt.pj.model.param.TaskPageParam;
import com.hyt.it.ogt.pj.model.vo.StudentVo;
import com.hyt.it.ogt.pj.model.vo.TaskPageItemVo;
import com.hyt.model.PageParam;

/**
 * <p>
 * 考生表 Mapper 接口
 * </p>
 *
 * @author qiaozj
 * @since 2020-07-09
 */
public interface StudentMapper extends BaseMapper<Student> {

	
    List<Student> selectBySubject(@Param("subjectId") String subjectId);

    
    List<Student> selectByProject(@Param("projectId") String projectId);
    
    
    List<Student> selectByProjectAndSubjectId(@Param("projectId") String projectId, @Param("subjectId") String subjectId);

    /**
     * 获取某项目或者某项目下某科目考生数量
     *
     * @param projectId 评卷项目id
     * @param subjectId 评卷科目id
     * @return 返回考生数量
     */
    Integer getStudentNum(@Param("projectId") String projectId, @Param("subjectId") String subjectId);

    Student getByAdmissionNum(@Param("projectId") String projectId, @Param("subjectId") String subjectId, @Param("admissionNum") String admissionNum);

    IPage<Student> selectStudent(PageParam<Student> pageParam, @Param("projectId") String projectId, @Param("status") String status, @Param("studentName") String studentName);

    /**
     * 查询每个科目需要减少的实考人数
     *
     * @param projectId     评卷项目id
     * @param admissionNums 准考证号
     * @return 每个科目需要减少的实考人数
     */
    List<NeedReduceDTO> getNeedReduce(@Param("projectId") String projectId, List<String> admissionNums);

    /**
     * 硬删除考生表中对应需要撤销评卷的考生
     *
     * @param projectId     评卷项目id
     * @param admissionNums 准考证号
     * @return 影响条数
     */
    int removeStudent(@Param("projectId") String projectId, List<String> admissionNums);

    /***
     * 获取评卷项目下最新的考生
     * @param projectId
     * @return
     */
	Student getLastOneStudentByProject(String projectId);




    /**
     * 获取评卷考分页数据
     *
     * @param pageParam
     * @param
     * @return
     */
    Page<TaskPageItemVo> taskStudentPage(Page<TaskPageItemVo> pageParam, @Param("param") TaskPageParam taskPageParam);


    /**
     * 获取评卷评分
     * @param
     * @return
     */
    List<BigDecimal>  taskStudentScore( @Param("param") TaskPageParam taskPageParam);


    /**
     * 获取老师要评的下一套试卷
     *
     * @param projectId
     * @param modeExpertId
     * @param taskTimeId
     * @param currUserId
     * @return
     */
    List<TaskPageItemVo> selectTaskByUserId(@Param("projectId") String projectId, @Param("modeExpertId") String modeExpertId, @Param("taskTimeId") String taskTimeId, @Param("currUserId") String currUserId);


    /**
     * 获取学生列表数据
     *
     * @return
     */
    IPage<StudentVo> getStudentListByTaskInfo(PageParam<StudentVo> pageParam,
    								@Param("projectId") String projectId,
    								@Param("subjectId") String subjectId,
                                    @Param("placeId") String placeId,
                                    @Param("batchId") String batchId,
                                    @Param("roomId") String roomId,
                                    @Param("name") String name,
                                    @Param("currUserId") String currUserId);


    /**
     * 获取学生列表数据[不要在用]
     *
     * @return
     */
    @Deprecated
    IPage<StudentVo> getStudentList(PageParam<StudentVo> pageParam, @Param("projectId") String projectId, @Param("subjectId") String subjectId,
                                    @Param("paperItem")String paperItem, @Param("placeId") String placeId,  @Param("batchId") String batchId,
                                    @Param("roomId") String roomId,@Param("name") String name, @Param("currUserId") String currUserId);


    /**
     * 模糊查询学生信息
     * @param name
     * @return
     */
    List<Student> selectByNameOradmissionNum(@Param("name") String name,@Param("projectId") String projectId);

}
